#ifndef EtProgEnv_First
#define EtProgEnv_First
#ifdef __GNUG__
#pragma interface
#endif

#include "ProgEnv.h"

class Object;
class SeqCollection;
class Class;
class VObject;
class PeInspectClickDialog;
class ObjectViewPolicy;
class EtPeManager;
class PathLookup;

//---- EtProgEnv ---------------------------------------------------------------
//     entry points for the ET++ programming environment

class EtProgEnv : public ProgEnv {
	SeqCollection *objViewPolicies;
	EtPeManager *pe;
	PeInspectClickDialog *dialog;

	EtPeManager *MakeEtPeManager();
public:
	MetaDef(EtProgEnv);
	EtProgEnv();
	~EtProgEnv();
	void InitNew();

	void Start();
	//---- source code browser
	void EditSourceOf(Class *cp, bool def, int at= -1);
	void ShowInHierarchy(Class *cp);
		
	//---- inspector
	void InspectObject(Object *op, bool block= FALSE);
	void ShowInObjStruBrowser(Object *vop);
	void InspectClick(VObject *vop);

	//---- abstract views
	void AddObjectViewPolicy(ObjectViewPolicy*);
	char *HasObjectView(Class *cl, void *addr, Object *op);
	void ShowObjectView(Class *cl, void *addr, Object *op, Object *insp);

	PathLookup *Universe();
	bool FileOfClass(Class *cl, char *fname, bool decl);

	//---- force linking of EtProgEvn
	static void Use();
};

extern ProgEnv *NewEtProgEnv();

#endif
